// 引入 express 框架和 WebClient 工具模块
const express = require('express');
const webClient = require('./WebClient');

const app = express();

// 推荐用环境变量，便于后续自动扩展
const PORT = process.env.PORT || 8080;

// 中间件：自动解析 JSON 请求体
app.use(express.json());

// ========== 路由注册 BEGIN ==========

// GET 示例接口：/api/hello
app.get('/api/hello', (req, res) => {
    res.json({ code: 0, msg: 'hello world', data: null });
});

// POST：登录接口演示 /api/login
app.post('/api/login', async (req, res) => {
    const { account, password } = req.body || {};

    if (!account || !password) {
        return res.status(400).json({ code: 1, msg: 'account 或 password 缺失', data: null });
    }

    let browser, page;
    try {
        // 初始化 Puppeteer 页面
        ({ browser, page } = await webClient.initPage());

        // 登录获取验证码
        const result = await webClient.loginAndGetCaptcha(page, account, password);
        await webClient.clearAllCookies(page);

        // 主动关闭 puppeteer 实例，防止内存泄露
        await browser.close();

        // 拦包、验证码等可能异常，webClient.loginAndGetCaptcha建议返回 {code, msg, response} 结构
        if (result.code !== 0) {
            return res.status(500).json({
                code: result.code,
                msg: result.msg,
                detail: result.response
            });
        }

        // 统一对response处理，data.response.body是服务端返回体
        res.json({ code: 0, msg: '登录成功', data: result.response.body });
    } catch (err) {
        // 确保 Puppeteer 资源被关闭
        if (browser) {
            try { await browser.close(); } catch {}
        }
        res.status(500).json({
            code: 500,
            msg: '内部服务异常，请联系管理员修复',
            error: err.message || err.toString()
        });
    }
});

// 通用 404 兜底路由
app.use((req, res) => {
    res.status(404).json({ code: 404, msg: '接口未定义，请联系管理员', url: req.originalUrl });
});

// ========== 路由注册 END ==========

// 启动服务监听端口
app.listen(PORT, () => {
    console.log(`HTTP接口服务已启动：http://localhost:${PORT}`);
});
